/**
 * 实名认证相关API接口
 */

import request from '../utils/request.js'
import { getCurrentUserId } from '../utils/userAuth.js'

export const identityApi = {
  /**
   * 身份证OCR识别
   * @param {Object} file - 身份证照片文件对象（包含path属性）
   * @param {string} side - 身份证面（face：正面，back：反面）
   */
  async recognizeIdCard(file, side = 'face') {
    console.log('调用OCR API:', {
      url: '/user/users/recognize-idcard-base64',
      filePath: file.path,
      side: side
    })

    try {
      // 将图片文件转换为base64
      const base64Data = await this.convertFileToBase64(file.path)

      // 使用POST方式发送base64数据
      const response = await request.post('/user/users/recognize-idcard-base64', {
        imageData: base64Data,
        side: side
      })

      console.log('OCR API 原始响应:', response)
      return response

    } catch (error) {
      console.error('OCR API 错误:', error)
      // 统一错误格式
      const errorMsg = error.message || error.errMsg || 'OCR识别服务异常'
      throw new Error(errorMsg)
    }
  },

  /**
   * 将文件转换为base64格式
   * @param {string} filePath - 文件路径
   * @returns {Promise<string>} base64字符串
   */
  convertFileToBase64(filePath) {
    return new Promise((resolve, reject) => {
      // #ifdef H5
      // H5环境处理
      if (filePath.startsWith('data:')) {
        // 如果已经是base64格式，直接返回
        resolve(filePath.split(',')[1])
        return
      }

      // 创建FileReader读取文件
      const xhr = new XMLHttpRequest()
      xhr.open('GET', filePath, true)
      xhr.responseType = 'blob'
      xhr.onload = function() {
        if (xhr.status === 200) {
          const reader = new FileReader()
          reader.onload = function() {
            const base64 = reader.result.split(',')[1]
            resolve(base64)
          }
          reader.onerror = reject
          reader.readAsDataURL(xhr.response)
        } else {
          reject(new Error('读取文件失败'))
        }
      }
      xhr.onerror = reject
      xhr.send()
      // #endif

      // #ifndef H5
      // 非H5环境使用uni.getFileSystemManager
      const fs = uni.getFileSystemManager()
      fs.readFile({
        filePath: filePath,
        encoding: 'base64',
        success: (res) => {
          resolve(res.data)
        },
        fail: (error) => {
          console.error('读取文件失败:', error)
          reject(new Error('读取文件失败: ' + error.errMsg))
        }
      })
      // #endif
    })
  },

  /**
   * 提交实名认证信息
   * @param {Object} identityData - 实名认证数据
   */
  submitIdentityVerification(identityData) {
    const userId = getCurrentUserId()
    
    // 检查用户是否已登录
    if (!userId) {
      console.error('❌ 用户未登录，无法提交认证')
      return Promise.reject(new Error('请先登录后再进行实名认证'))
    }
    
    console.log('📤 开始调用提交认证API:', {
      userId,
      identityData,
      url: '/user/users/identity/submit'
    })
    
    // 构建查询参数，因为后端使用@RequestParam
    const params = {
      userId,
      realName: identityData.name,
      idNumber: identityData.idNumber,
      phone: identityData.phone
    }
    
    // 如果有OCR识别信息，也一起提交
    if (identityData.frontRecognition) {
      params.frontImageInfo = JSON.stringify(identityData.frontRecognition)
    }
    if (identityData.backRecognition) {
      params.backImageInfo = JSON.stringify(identityData.backRecognition)
    }
    
    console.log('📄 最终参数:', params)
    
    // 使用POST请求，参数作为查询参数传递
    return request.post('/user/users/identity/submit', null, {
      params
    }).then(response => {
      console.log('✅ 提交认证响应:', response)
      return response
    }).catch(error => {
      console.error('❌ 提交认证错误:', error)
      throw error
    })
  },

  /**
   * 获取实名认证状态
   */
  getIdentityStatus() {
    const userId = getCurrentUserId()
    
    // 检查用户是否已登录
    if (!userId) {
      console.log('🔑 用户未登录，返回未认证状态')
      return Promise.resolve({
        success: true,
        data: {
          status: 'not_verified',
          realName: null,
          verificationStatus: null
        }
      })
    }
    
    return request.get('/user/users/identity/status', {
      userId
    })
  },

  /**
   * OCR服务健康检查
   */
  checkOcrHealth() {
    return request.get('/user/users/ocr/health')
  }
}

export default identityApi